﻿using System;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using PontoDeVenda;

using System.Collections.Generic;
using Dals;

namespace PontoDeVenda.Web
{
    [ServiceContract(Namespace = "")]
    [SilverlightFaultBehavior]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class DataService
    {

        #region Cliente

        [OperationContract]
        public Cliente GetClientePorId(int id)
        {
            DataClasseClienteDataContext db = new DataClasseClienteDataContext();
            try
            {
                ListarClientes();
                Cliente cliente = db.LocalizarClientePorID(id).First();
                return cliente;
            }
            catch (Exception)
            {
                return null;
            }
        }

        [OperationContract]
        public void AtualizarCliente(Cliente cliente)
        {
            DataClasseClienteDataContext db = new DataClasseClienteDataContext();
            db.AtualizarCliente(cliente.clienteID, cliente.nome, cliente.sexo, cliente.email);
        }

        [OperationContract]
        public void DeletarCliente(int id)
        {
            DataClasseClienteDataContext db = new DataClasseClienteDataContext();
            int i = db.DeletarCliente(id);
        }

        [OperationContract]
        public void InserirCliente(Cliente cliente)
        {
            DataClasseClienteDataContext db = new DataClasseClienteDataContext();
            db.InserirCliente(cliente.clienteID, cliente.nome, cliente.sexo, cliente.email);
        }

        #endregion

        #region Produto

        [OperationContract]
        public Produto GetProdutoPorId(int id)
        {
            DataClasseClienteDataContext db = new DataClasseClienteDataContext();
            try
            {
                Produto produto = db.LocalizarProdutoPorID(id).First();
                return produto;
            }
            catch (Exception)
            {
                return null;
            }
        }

        [OperationContract]
        public void AtualizarProduto(Produto produto)
        {
            DataClasseClienteDataContext db = new DataClasseClienteDataContext();
            db.AtualizarProduto(produto.produtoID, produto.descricao, produto.precoUnitario);
        }

        [OperationContract]
        public void DeletarProduto(int id)
        {
            DataClasseClienteDataContext db = new DataClasseClienteDataContext();
            int i = db.DeletarProduto(id);
        }

        [OperationContract]
        public void InserirProduto(Produto produto)
        {
            DataClasseClienteDataContext db = new DataClasseClienteDataContext();
            db.InserirProduto(produto.produtoID, produto.descricao, produto.precoUnitario);
        }

        #endregion

        #region Pedido

        [OperationContract]
        public Pedido GetPedidoPorId(int id)
        {
            try
            {
                PedidoDal dal = new PedidoDal();
                var pedido = dal.SelectPedidoPorId(id);
                return pedido;
            }
            catch (Exception ex)
            {
                return null;
            }
        }

        [OperationContract]
        public List<Cliente> ListarClientes()
        {
            try
            {
                PedidoDal dal = new PedidoDal();
                var clientes = dal.SelectClientes();
                return clientes;
            }
            catch (Exception ex)
            {
                return null;
            }
        }

        [OperationContract]
        public List<Produto> ListarProdutos()
        {
            try
            {
                PedidoDal dal = new PedidoDal();
                var produtos = dal.SelectProdutos();
                return produtos;
            }
            catch (Exception)
            {
                return null;
            }
        }

        [OperationContract]
        public void InserirPedido(Pedido pedido)
        {
            try
            {
                PedidoDal dal = new PedidoDal();
                dal.InserirPedido(pedido);
            }
            catch (Exception)
            {
                throw;
            }
        }

        [OperationContract]
        public void AtualizarPedido(Pedido pedido)
        {
            try
            {
                PedidoDal dal = new PedidoDal();
                dal.AtualizarPedido(pedido);
            }
            catch (Exception)
            {
                throw;
            }
        }

        [OperationContract]
        public void DeletarPedido(int id)
        {
            try
            {
                PedidoDal dal = new PedidoDal();
                dal.DeletarPedido(id);
            }
            catch (Exception)
            {
                throw;
            }
        }

        #endregion


    }
}
